/**
 * 应用窗口界面 管理
 * 
 * @export
 * @class Webview
 */
export default class Webview {
  /**
   * 获取所有Webview窗口
   * 
   * @static
   * @returns 
   * 
   * @memberOf Webview
   */
  static all() {
    return plus.webview.all();
  }

  /**
   * 关闭Webview窗口
   * 
   * @static
   * @param {string} [id=''] 
   * 
   * @memberOf Webview
   */
  static close(id = '') {
    var ws = id ? plus.webview.getWebviewById(id) : plus.webview.currentWebview();
    ws && plus.webview.close(ws);
  }

  /**
   * 获取当前窗口的WebviewObject对象
   * 
   * @static
   * 
   * @memberOf Webview
   */
  static currentWebview() {
    return plus.webview.currentWebview();
  }

  /**
   * 获取屏幕所有可视的Webview窗口
   * 
   * @static
   * 
   * @memberOf Webview
   */
  static getDisplayWebview() {
    return plus.webview.getDisplayWebview();
  }

  /**
   * 查找指定标识的WebviewObject窗口
   * 
   * @static
   * @param {string} [id=''] 
   * @returns 
   * 
   * @memberOf Webview
   */
  static getWebviewById(id = '') {
    return plus.webview.getWebviewById(id);
  }

  /**
   * 获取应用入口页面所属的Webview窗口
   * 
   * @static
   * @returns 
   * 
   * @memberOf Webview
   */
  static getMainWebview() {
    return plus.webview.getWebviewById(plus.runtime.appid);

  }

  /**
   * 获取应用首页WebviewObject窗口对象
   * 
   * @static
   * 
   * @memberOf Webview
   */
  static getLaunchWebview() {
    return plus.webview.getLaunchWebview();
  }

  /**
   * 获取应用第二个首页WebviewObject窗口对象
   * 
   * @static
   * @returns 
   * 
   * @memberOf Webview
   */
  static getSecondWebview() {
    return plus.webview.getSecondWebview();
  }

  /**
   * 获取应用显示栈顶的WebviewObject窗口对象
   * 
   * @static
   * 
   * @memberOf Webview
   */
  static getTopWebview() {
    return plus.webview.getTopWebview();
  }

  /**
   * 显示Webview窗口
   * 
   * @static
   * @param {any} config 
   * @param {any} [style={}] 
   * 
   * @memberOf Webview
   */
  static show(config, style = {}) {
    return new Promise((resolve, reject) => {
      if (config && config.id) {
        plus.webview.show(config.id, "slide-in-right", 600, () => {
            resolve();
          },
          ...style);
      }
    });

  }

  /**
   * 隐藏Webview窗口
   * 
   * @static
   * 
   * @memberOf Webview
   */
  static hide(id = '') {
    const wv = id ? plus.webview.getWebviewById(id) : plus.webview.currentWebview();
    wv && plus.webview.hide(wv);
  }

  /**
   * 预载网络页面
   * 
   * @static
   * @param {string} [url=''] 
   * 
   * @memberOf Webview
   */
  static prefetchURL(url = '') {
    plus.webview.prefetchURL(url);
  }

  /**
   * 预载网络页面（多个地址）
   * 
   * @static
   * @param {any} [urls=[]] 
   * 
   * @memberOf Webview
   */
  static prefetchURLs(urls = []) {
    plus.webview.prefetchURLs(urls);
  }

  /**
   * 打开一个webview窗口
   * 
   * @static
   * @param {any} config 
   * @returns 
   * 
   * @memberOf Webview
   */
  static open(config) {
    return new Promise((resolve, reject) => {
      const wv = plus.webview.open(config.url, config.id, {
        top: 0, // 新页面顶部位置
        bottom: 0, // 新页面底部位置
        render: "always",
        popGesture: "hide",
        bounce: "vertical",
        bounceBackground: "#efeff4",
        titleNView: {
          // 详情页原生导航配置
          backgroundColor: "#f7f7f7", // 导航栏背景色
          titleColor: "#000000", // 文字颜色
          type: "default", // 标题栏控件样式("transparent/default")
          autoBackButton: config.autoBackButton === undefined ? true : config.autoBackButton, // 自动绘制返回箭头
          titleText: config.title || '', // 导航栏标题
          homeButton: config.homeButton === undefined ? false : config.homeButton,
          splitLine: {
            // 底部分割线
            color: "#cccccc"
          }
        }
      }, "slide-out-right", 200, () => {
        resolve(wv);
      });
    });
  }

  /**
   * 打开一个webview窗口
   * 
   * @static
   * @param {any} config 
   * @param {any} [style={}] 
   * 
   * @memberOf Webview
   */
  static openWebview(config, style = {}) {
    var params = config.params ? config.params : {};
    var wv = plus.webview.create(config.url, config.id, {
      top: config.top === undefined ? config.top : 0, // 新页面顶部位置
      bottom: 0, // 新页面底部位置
      render: "always",
      popGesture: "hide",
      bounce: "vertical",
      bounceBackground: "#efeff4",
      titleNView: {
        // 详情页原生导航配置
        backgroundColor: "#f7f7f7", // 导航栏背景色
        titleColor: "#000000", // 文字颜色
        type: "default", // 标题栏控件样式("transparent/default")
        autoBackButton: config.autoBackButton === undefined ? true : config.autoBackButton, // 自动绘制返回箭头
        titleText: config.title || '', // 导航栏标题
        homeButton: config.homeButton === undefined ? false : config.homeButton,
        splitLine: {
          // 底部分割线
          color: "#cccccc"
        }
      },
      ...style
    }, params);
    var w = plus.nativeUI.showWaiting();
    wv.addEventListener(
      "loaded",
      function () {
        wv.show("slide-in-right"); // 显示窗口
        w.close();
        w = null;
      },
      false
    );
  }

  /**
   * 打开一个透明导航条webview窗口
   * 
   * @static
   * @param {any} config 
   * @param {any} [style={}] 
   * 
   * @memberOf Webview
   */
  static openTransparentWebview(config, style = {}) {
    var params = config.params ? config.params : {};
    var wv = plus.webview.create(config.url, config.id, {
      top: config.top !== undefined ? config.top : 0, // 新页面顶部位置
      bottom: config.bottom !== undefined ? config.bottom : 0, // 新页面底部位置
      render: "always",
      popGesture: "hide",
      bounce: "vertical",
      bounceBackground: "#efeff4",
      titleNView: {
        // 详情页原生导航配置
        backgroundColor: "#f7f7f7", // 导航栏背景色
        titleColor: "#000000", // 文字颜色
        type: "transparent", // 标题栏控件样式("transparent/default")
        autoBackButton: config.autoBackButton === undefined ? true : config.autoBackButton, // 自动绘制返回箭头
        titleText: config.title || '', // 导航栏标题
        homeButton: config.homeButton === undefined ? false : config.homeButton,
        splitLine: {
          //底部分割线
          color: "#cccccc"
        }
      },
      ...style
    }, params);
    var w = plus.nativeUI.showWaiting();
    wv.addEventListener(
      "loaded",
      function () {
        // wv.show("slide-in-right"); // 显示窗口
        wv.show("none");
        w.close();
        w = null;
      },
      false
    );
  }

  /**
   * 打开一个无导航条webview窗口
   * 
   * @static
   * @param {any} config 
   * @param {any} [style={}] 
   * 
   * @memberOf Webview
   */
  static openNoTopBarWebview(config, style = {}) {
    var params = config.params ? config.params : {};
    var wv = plus.webview.create(config.url, config.id, {
      top: 0, // 新页面顶部位置
      bottom: 0, // 新页面底部位置
      render: "always",
      popGesture: "hide",
      bounce: "vertical",
      bounceBackground: "#efeff4",
      ...style
    }, params);
    var w = plus.nativeUI.showWaiting();
    wv.addEventListener(
      "loaded",
      function () {
        wv.show("slide-in-right"); // 显示窗口
        w.close();
        w = null;
      },
      false
    );
  }
}